/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Cliente.Model;

import Cliente.Entidade.Cliente;
import Cliente.Entidade.Consulta;
import acessoBD.AcessoBD;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 *
 * @author Caio
 */
public class ConsultaPaciente {
    private PreparedStatement ps;
    private Connection con;
    private ResultSet rs;
    private final AcessoBD acessoBD = new AcessoBD();
    private final String alteraCliente = "update cliente set cpf = ?, nome = ?, altura = ?, sexo = ?,idade = ?, peso = ?,"
            + " iac = ?, imc = ?, quadril = ?, cintura = ?, rcq = ?, consultado = ? where cliente.id = ?";
    private final String cadastraConsulta = "insert into consulta (nome,rcq,imc,iac,date) values(?,?, ?, ?, ?)";
    private final String checaConsultaNome = "select * from consulta where consulta.nome like ?";
    private final String listaConsutas= "select * from consulta";
    
    public boolean consultaPaciente(Cliente cliente) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(alteraCliente);

            ps.setString(1, cliente.getCpf());
            ps.setString(2, cliente.getNome());
            ps.setDouble(3, cliente.getAltura());         
            ps.setString(4,cliente.getSexo());
            ps.setInt(5,cliente.getIdade());
            ps.setDouble(6,cliente.getPeso());
            ps.setString(7,cliente.getIAC());
            ps.setString(8,cliente.getIMC());
            ps.setDouble(9,cliente.getCintura());
            ps.setDouble(10,cliente.getCintura());
            ps.setString(11,cliente.getRCQ());
            ps.setString(12,cliente.getCongnsultado());
            ps.setInt(13, cliente.getId());
            
            ps.executeUpdate();

            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    public boolean incluiConsulta(Consulta consulta) {
        try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(cadastraConsulta);
            ps.setString(1, consulta.getNome());
            ps.setString(2, consulta.getRCQ());
            ps.setString(3, consulta.getIMC());
            ps.setString(4, consulta.getIAC());
            ps.setDate(5, consulta.getData());
            ps.executeUpdate();
            acessoBD.desconectar();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    } 
  
    
    
    public List<Cliente> datasAtrasadas(){
       PesquisarPaciente busca = new PesquisarPaciente();
       List<Cliente> clientesAtraso = new ArrayList<>();
       List<Cliente> clientes = busca.listarClientes();
       final Calendar dataA = Calendar.getInstance();
       for (int i=0;i<clientes.size();i++){
           Date data = encontraUltimaData(clientes.get(i).getNome());
           Date dataAtual = new java.sql.Date(dataA.getTime().getTime());   
           long d1 = (dataAtual.getTime());
           long d2 = (data.getTime());
           long dias = (int)(((d1-d2))/(24*60*60*1000));
           if (dias>=30){
               clientesAtraso.add(clientes.get(i));
           }
       }
       return clientesAtraso;
    }
    
    public List<Consulta> checarConsultas(String nome){
        List<Consulta> consultas = new ArrayList<>();
             try {
            con = acessoBD.conectar();
            ps = con.prepareStatement(checaConsultaNome);
            ps.setString(1, nome);
            rs = ps.executeQuery();
            while (rs.next()) {
                Consulta consulta =new Consulta();
                consulta.setId(rs.getInt("idconsulta"));
                consulta.setNome(rs.getString("nome"));
                consulta.setRCQ(rs.getString("rcq"));
                consulta.setIAC(rs.getString("iac"));               
                consulta.setIMC(rs.getString("imc"));
                consulta.setData(rs.getDate("date"));
                consultas.add(consulta);
            }
            acessoBD.desconectar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return consultas;
    }
    
    
    public Date encontraUltimaData(String nome){
          try {
            final Calendar data = Calendar.getInstance();
            Date dataRetorno=null;
            Date dataAtual = new java.sql.Date(data.getTime().getTime());           
            con = acessoBD.conectar();
            ps = con.prepareStatement(checaConsultaNome);
            ps.setString(1, nome);
            rs = ps.executeQuery();
            while (rs.next()) {
                Consulta consulta =new Consulta();
                Date dataCon = new java.sql.Date(rs.getDate("date").getTime());
                if(dataAtual.compareTo(dataCon)==0){
                    dataRetorno= new java.sql.Date(dataAtual.getTime());
                }else if (dataAtual.compareTo(dataCon)<0) {
                    dataAtual = new java.sql.Date(dataCon.getTime());
                    dataRetorno = new java.sql.Date(dataAtual.getTime());               
                }else{
                    
                }
            }
            acessoBD.desconectar();
            return dataRetorno;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
  
    
}
